
package ija.model.figures;

import ija.model.basis.Figure;
import ija.model.basis.Position;
import ija.model.types.FigureColor;

/**
 * Abstraktní třída reprezentuji figurku pro hru Dáma.
 * @author Radek Necas, xnecas18
 */
public abstract class CheckersFigure extends Figure {
    
    public CheckersFigure(Position p, FigureColor c)
    {
        super(p, c);
    }
    
    public CheckersFigure(Position p, CheckersFigure copyFigure)
    {
        super(p, copyFigure);
    }
    
    /**
     * Metoda provádí skok figurky z její pozice do cílové pozice.
     * Mezi startovací a cílovou pozicí musí být figurka, jinak není skok možný.
     * Při skoku jsou adekvátně změněny všechny zúčastněné objekty 
     * (startovací a cílová pozice, přeskakovaná figurka a její pozice).
     * Metoda provádí pouze jeden skok. Víceskoky se musí reprezentovat vícenásobným voláním.
     * Vyhozena figurka je vlozena do zasobniku vyhozenych figurek desky.
     * 
     * @param endPosition cílová pozice skoku. Měla by být součástí téže šachovnice (ale není testováno).
     * @return true pokud je skok proveden, jinak false.
     */
    public boolean jump(Position endPosition)
    {
        Position p = canJump(endPosition);
        if(p != null) {
            this.position.removeFigure();
            this.position = endPosition;
            endPosition.putFigure(this);
            this.position.getDesk().pushRemovedFigure(p.removeFigure());
            return true;
        }
        
        return false;        
    }
    
    public abstract Position canJump(Position endPosition);    
}
